Gráficos

Column

Relación consumo notícias televisión y confianza en la gente

Column

Notícias en la televisión por país

Notícias en la televisión Gran Bretaña

Tablas

---
title: "Dashboard Ciencia de Datos Reto 2"
author: "Arnau Bertran"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    social: menu
    source_code: embed
---

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(maps)
library(DT)
library(lorem)
```

```{r}
datos <- read.csv('datos_depurados.csv')

```

Gráficos {data-icon="fa-signal"}
=======================================================================

Column {data-width=550}
-----------------------------------------------------------------------

### Relación consumo notícias televisión y confianza en la gente

```{r}
correlation <- cor(datos$tvpol, datos$ppltrst)


ggplot(datos, aes(x = ppltrst, fill = factor(tvpol))) +
  geom_density(alpha = 0.6) +
  labs(x = "Confianza en la gente (ppltrst)",
       y = "Densidad",
       fill = "Tiempo de noticias en TV (tvpol)") +
  theme_minimal() +
  theme(
    legend.title = element_text(size = 8),   # Tamaño del título de la leyenda
    legend.text = element_text(size = 7),    # Tamaño del texto de la leyenda
    legend.key.size = unit(0.6, "cm")        # Tamaño de las claves de la leyenda
  )

model <- lm(ppltrst ~ tvpol, data = datos)

```

Column {data-width=450}
-----------------------------------------------------------------------

### Notícias en la televisión por país

```{r}
# Instalar y cargar las librerías necesarias
install.packages("dplyr")
install.packages("ggplot2")
install.packages("maps")

library(dplyr)
library(ggplot2)
library(maps)

# Calcular la media de tvpol por país
avg_time_per_country <- datos %>%
  group_by(cntry) %>%
  summarise(mean_tvpol = mean(tvpol, na.rm = TRUE)) %>%
  arrange(desc(mean_tvpol))

# Mapeo manual de códigos de país a nombres completos
country_mapping <- c(
  "AL" = "Albania",
  "AT" = "Austria",
  "BE" = "Belgium",
  "BG" = "Bulgaria",
  "CH" = "Switzerland",
  "CY" = "Cyprus",
  "CZ" = "Czechia",
  "DE" = "Germany",
  "DK" = "Denmark",
  "EE" = "Estonia",
  "ES" = "Spain",
  "FI" = "Finland",
  "FR" = "France",
  "GB" = "United Kingdom",
  "GE" = "Georgia",
  "GR" = "Greece",
  "HR" = "Croatia",
  "HU" = "Hungary",
  "IE" = "Ireland",
  "IS" = "Iceland",
  "IL" = "Israel",
  "IT" = "Italy",
  "LT" = "Lithuania",
  "LU" = "Luxembourg",
  "LV" = "Latvia",
  "ME" = "Montenegro",
  "MK" = "North Macedonia",
  "NL" = "Netherlands",
  "NO" = "Norway",
  "PL" = "Poland",
  "PT" = "Portugal",
  "RO" = "Romania",
  "RS" = "Serbia",
  "RU" = "Russian Federation",
  "SE" = "Sweden",
  "SI" = "Slovenia",
  "SK" = "Slovakia",
  "TR" = "Turkey",
  "UA" = "Ukraine",
  "XK" = "Kosovo"
)

# Renombrar los códigos de país a nombres completos
avg_time_per_country$cntry <- recode(avg_time_per_country$cntry, !!!country_mapping)

# Obtener los datos del mapa mundial
world_map <- map_data("world")

# Renombrar la columna `region` para que coincida con los nombres de los países en `avg_time_per_country`
colnames(world_map)[which(names(world_map) == "region")] <- "cntry"

# Combinar los datos del mapa con los datos de `tvpol`
map_data <- left_join(world_map, avg_time_per_country, by = "cntry")

# Crear el gráfico del mapa
ggplot(map_data, aes(x = long, y = lat, group = group, fill = mean_tvpol)) +
  geom_polygon(color = "black") +
  scale_fill_gradient(low = "lightblue", high = "darkblue", na.value = "grey50") +
  labs(fill = "Media de tvpol") +
  theme_void() +
  theme(legend.position = "right")


```

### Notícias en la televisión Gran Bretaña

```{r}
ggplot(data = datos[datos$cntry == "GB", ],
       aes(x = factor(tvpol, levels = 0:7, labels = c("Nada", "30 min", "30-60 min", "60-90 min", "90-120 min", "120-150 min", "150-180 min", "Más de 180 min")),
           fill = factor(tvpol, levels = 0:7, labels = c("Nada", "30 min", "30-60 min", "60-90 min", "90-120 min", "120-150 min", "150-180 min", "Más de 180 min")))) +
  geom_bar(color = "black", alpha = 0.7) +
  scale_fill_brewer(palette = "Blues") +
  labs(x = "Categorías de tiempo viendo noticias",
       y = "Frecuencia",
       fill = "Tiempo de noticias en TV") +  # Etiqueta para la leyenda
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  # Muestra etiquetas del eje x
    axis.title.x = element_text(size = 12),             # Tamaño del título del eje x
    axis.title.y = element_text(size = 12),             # Tamaño del título del eje y
    legend.title = element_text(size = 10),             # Tamaño del título de la leyenda
    legend.text = element_text(size = 8)                # Tamaño del texto de la leyenda
  )
```


Tablas {data-icon="fa-table"}
=======================================================================

```{r}
datatable(datos,
          caption = 'Datos Media and Social Trust',
          rownames = T,
          filter = 'top',
          options = list(pageLength = 25))
```